home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Games / SpriteFight 2002 v2.0a1 / ChevyGnuoy.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-28  |  4.1 KB  |  124 lines  |  [TEXT/SPM ]

  1. /*******************************************************
  2. *** ChevyGnuoy.c
  3. *** By: Stefan C. Sinclair
  4. *** Copyright © 1996 All Rights Reserved Worldwide.
  5. *** Chevy Gnuoy's Background sprite control routines
  6. *******************************************************/
  7.  
  8. #include "SpriteBackground.h"
  9.  
  10. extern CWindowPtr    gWindowP;
  11. extern short    gFrameAdvanceTime;
  12. extern RgnHandle gWorkRgn;
  13.  
  14.  
  15. void SetupChevyGnuoySprite(SpritePtr spriteP)
  16. {
  17.     Rect tempBoundsRect, moveBoundsRect;
  18.     short horizMoveDelta;
  19.     short vertMoveDelta;
  20.     
  21.     moveBoundsRect = gWindowP->portRect;
  22.     moveBoundsRect.left -= 800;
  23.     moveBoundsRect.right += 800;
  24.     
  25.     tempBoundsRect = moveBoundsRect;
  26.     horizMoveDelta = 5;        //GetRandom(2, 6);
  27.     vertMoveDelta =    0;        //GetRandom(2, 6);
  28.     
  29.     // calculate the movement boundary rectangle
  30.     InsetRect(&tempBoundsRect, horizMoveDelta, vertMoveDelta);
  31.  
  32.     // set the sprite’s movement characteristics
  33.     SWSetSpriteMoveBounds(spriteP, &tempBoundsRect);
  34.     SWSetSpriteMoveDelta(spriteP, horizMoveDelta, vertMoveDelta);
  35.     SWSetSpriteMoveProc(spriteP, ChevyGnuoyMoveProc); //• mine
  36.     // Maximum Speed!!!
  37.     SWSetSpriteMoveTime(spriteP, 5*(20-gFrameAdvanceTime-1));
  38.     SWSetSpriteFrameTime(spriteP, 5*(20-gFrameAdvanceTime-1));
  39.     SWSetSpriteFrameRange(spriteP, 0, 0);
  40.     SWSetSpriteFrameAdvance(spriteP, 1);
  41.     // Default draw proc = CopyBits
  42.     SWSetSpriteCollideProc(spriteP, ChevyGnuoySpriteCollideProc); // mine
  43.     // set the sprite’s initial location
  44.     SWSetSpriteLocation(spriteP, -300, (moveBoundsRect.bottom - 200));
  45. }
  46.  
  47. // ChevyGnuoySpriteCollideProc----------------------------------------------------------------
  48. void ChevyGnuoySpriteCollideProc(SpritePtr srcSpriteP,SpritePtr dstSpriteP,Rect* sectRect)
  49. {
  50.     //• uncomment to check for collision!
  51.     /*
  52.     Rect rgnRect;
  53.     //unsigned char    *srcSpriteDataPtr,*dstSpriteDataPtr; // use as an array of 8 u. chars.
  54.     
  55.     // Access sprite's userData
  56.     //srcSpriteDataPtr = (unsigned char *)&srcSpriteP->userData;
  57.     //dstSpriteDataPtr = (unsigned char *)&dstSpriteP->userData;
  58.     
  59.     // If both sprites use the same collision routine (this one),ignore the second collision.
  60.     if ((!srcSpriteP->isVisible || !dstSpriteP->isVisible) ||
  61.         ((srcSpriteP->spriteCollideProc == dstSpriteP->spriteCollideProc) &&
  62.         (srcSpriteP > dstSpriteP)))
  63.         return;
  64.  
  65.     rgnRect = (**srcSpriteP->curFrameP->maskRgn).rgnBBox;
  66.  
  67.     // move the mask region to the new sprite location
  68.     OffsetRgn(srcSpriteP->curFrameP->maskRgn,
  69.                 (srcSpriteP->destFrameRect.left - rgnRect.left) +
  70.                 srcSpriteP->curFrameP->offsetPoint.h,
  71.                 (srcSpriteP->destFrameRect.top - rgnRect.top) +
  72.                 srcSpriteP->curFrameP->offsetPoint.v);
  73.  
  74.     rgnRect = (**dstSpriteP->curFrameP->maskRgn).rgnBBox;
  75.  
  76.     // move the mask region to the new sprite location
  77.     OffsetRgn(dstSpriteP->curFrameP->maskRgn,
  78.                 (dstSpriteP->destFrameRect.left - rgnRect.left) +
  79.                 dstSpriteP->curFrameP->offsetPoint.h,
  80.                 (dstSpriteP->destFrameRect.top - rgnRect.top) +
  81.                 dstSpriteP->curFrameP->offsetPoint.v);
  82.  
  83.     SectRgn(srcSpriteP->curFrameP->maskRgn, dstSpriteP->curFrameP->maskRgn, gWorkRgn);
  84.  
  85.     if (!EmptyRgn(gWorkRgn)) // There is an overlap
  86.     {
  87.         return;
  88.     }
  89.     */
  90.     return; // bare minimum!
  91. }
  92.  
  93. /** ChevyGnuoyMoveProc **/
  94. // Here, reset sprite frame range as necessary depending on location.
  95. SW_FUNC void ChevyGnuoyMoveProc(SpritePtr srcSpriteP, Point* spritePoint)
  96. {
  97.     unsigned char    *spriteDataPtr; // use as an array of 8 u. chars.
  98.     Rect    viewRect = gWindowP->portRect;
  99.     
  100.     // Access sprite's userData
  101.     //spriteDataPtr = (unsigned char *)&srcSpriteP->userData;
  102.     
  103.     // hit left boundary
  104.     if (srcSpriteP->destFrameRect.left <= srcSpriteP->moveBoundsRect.left)
  105.     {
  106.         srcSpriteP->horizMoveDelta *= -1; // reverse drxn
  107.         spritePoint->h = srcSpriteP->moveBoundsRect.left + 400;
  108.         SWSetSpriteLocation(srcSpriteP, spritePoint->h, spritePoint->v);
  109.     }
  110.     // hit right boundary
  111.     if (srcSpriteP->destFrameRect.right >= srcSpriteP->moveBoundsRect.right)
  112.     {
  113.         srcSpriteP->horizMoveDelta *= -1; // reverse drxn
  114.         spritePoint->h = srcSpriteP->moveBoundsRect.right - 400;
  115.         SWSetSpriteLocation(srcSpriteP, spritePoint->h, spritePoint->v);
  116.         
  117.     }
  118.     
  119.     // Adjust frame range
  120.     if(srcSpriteP->horizMoveDelta > 0) // moving right
  121.         SWSetSpriteFrameRange(srcSpriteP, 0, 0);
  122.     else // moving left
  123.         SWSetSpriteFrameRange(srcSpriteP, 1, 1);
  124. }